#ifndef _WAV_H
#define _WAV_H

#include "sys/_stdint.h"

// RIFF_chunk（文件整体信息块）
typedef struct {
    char        riff_id[4];        // "RIFF"（标识RIFF格式）
    uint32_t    file_size;         // 文件总大小 - 8（不包含riff_id和file_size本身）
    char        wave_id[4];        // "WAVE"（标识WAV格式）
} RiffChunk;

// fmt_subchunk（音频格式信息块）
typedef struct {
    char        fmt_id[4];         // "fmt "（注意末尾有空格，标识格式块）
    uint32_t    fmt_size;          // 格式块大小（PCM格式固定为16字节）
    uint16_t    audio_format;      // 音频编码格式（PCM为1，其他为压缩格式）
    uint16_t    num_channels;      // 声道数（1=单声道，2=立体声）
    uint32_t    sample_rate;       // 采样率（如44100 Hz）
    uint32_t    byte_rate;         // 字节率 = 采样率 * 声道数 * 位深/8
    uint16_t    block_align;       // 块对齐 = 声道数 * 位深/8（每次采样的字节数）
    uint16_t    bits_per_sample;   // 位深（如16位、8位、24位）
} FmtSubchunk;

// data_subchunk（音频数据块）
typedef struct {
    char        data_id[4];        // "data"（标识数据块）
    uint32_t    data_size;         // 音频数据总大小（字节）
    // 紧跟其后的是实际音频数据（无结构体成员，需单独读取）
} DataSubchunk;

// 完整WAV头部（包含上述三个部分）
typedef struct {
    RiffChunk       riff;          // RIFF块
    FmtSubchunk     fmt;           // 格式块
    DataSubchunk    data;          // 数据块头部
} WavHeader;

#endif